#!/bin/bash
# 数据加载脚本 - 精确路径版
#有一定的逻辑beg
# 参数设置
data_date=${1:-$(date -d '-1 day' +%F)}
DB_NAME="jtp_ads_warehouse"
SOURCE_BASE="/user/spark/warehouse/${DB_NAME}"  # 修正为实际数据路径

# 检查组件
command -v beeline >/dev/null || { echo "错误：beeline命令未找到"; exit 1; }
command -v hdfs >/dev/null || { echo "错误：hdfs命令未找到"; exit 1; }

# 加载数据函数
load_data() {
  local table=$1
  local source_path="${SOURCE_BASE}/${table}/${data_date}"

  echo "==== 处理 ${table} ===="
  echo "精确数据路径: hdfs://node101:8020${source_path}"

  # 严格路径检查
  if ! hdfs dfs -test -d "${source_path}"; then
    echo "[错误] 数据目录不存在或不是目录"
    echo "请执行以下命令检查:"
    echo "  hdfs dfs -ls ${SOURCE_BASE}/${table}/"
    return 1
  fi

  # 执行加载（显示完整SQL）
  echo "执行: LOAD DATA INPATH '${source_path}' INTO TABLE ${table} PARTITION (dt='${data_date}')"
  if beeline -u jdbc:hive2://node101:10001/${DB_NAME} -n bwie -e "
    LOAD DATA INPATH '${source_path}'
    INTO TABLE ${table}
    PARTITION (dt='${data_date}');"; then
    echo "[成功] 数据已从 ${source_path} 加载"
    return 0
  else
    return 1
  fi
}

# 主流程
echo "==== 数据加载任务开始 ===="
echo "数据库: ${DB_NAME}"
echo "处理日期: ${data_date}"
echo "数据根路径: ${SOURCE_BASE}"

# 表列表（按实际需要调整）
TABLES=(
  "ods_ads"
  "ods_platform_info"
  "ods_product"
  "ods_ads_platform"
)

# 顺序加载
for table in "${TABLES[@]}"; do
  if load_data "${table}"; then
    echo "[√] ${table} 加载成功"
  else
    echo "[×] ${table} 加载失败"
    echo "调试建议："
    echo "1. 检查路径是否存在: hdfs dfs -ls ${SOURCE_BASE}/${table}/"
    echo "2. 手动测试: beeline -u jdbc:hive2://node101:10001/${DB_NAME} -e \"LOAD DATA INPATH '${SOURCE_BASE}/${table}/${data_date}' INTO TABLE ${table} PARTITION (dt='${data_date}');\""
    exit 1
  fi
done

echo "==== 所有表加载完成 ===="
echo "数据最终位置: ${SOURCE_BASE}/[表名]/dt=${data_date}"